package com.example.mqtt.config;

import com.example.mqtt.entity.QueueInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;

/**
 * @author qwert
 * @version 1.0.0
 * @create 2025/5/3 16:48
 **/
@Slf4j
@Component
public class MessageQueueManager {
    // 创建全局阻塞队列（容量1000）
    private final BlockingDeque<QueueInfo> globalQueue = new LinkedBlockingDeque<>(1000);

    /**
     * 入队操作（阻塞直到有空间）
     */
    public void put(QueueInfo info){
        try {
            globalQueue.put(info);
        } catch (InterruptedException e) {
            log.info("queue put error");
        }
    }

    /**
     * 非阻塞入队
     */
    public boolean offer(QueueInfo info) {
        return globalQueue.offer(info);
    }

    /**
     * 出队操作（阻塞直到有元素）
     */
    public QueueInfo take() throws InterruptedException {
        return globalQueue.take();
    }

    /**
     * 非阻塞出队
     */
    public QueueInfo poll() {
        return globalQueue.poll();
    }

    /**
     * 当前队列大小
     */
    public int size() {
        return globalQueue.size();
    }

    /**
     * 获取队列顶部元素（不移除）
     */
    public QueueInfo peek() {
        return globalQueue.peekFirst();
    }
}